package agents

import (
	"encoding/json"
	"fmt"
	"time"
	"webhook-agents/config"
	"webhook-agents/utils"
)

// SkyWalkingProcessor SkyWalking处理器
type SkyWalkingProcessor struct {
	httpClient *utils.HTTPClient
	ditingURL  string
	endpoint   string
}

// NewSkyWalkingProcessor 创建新的SkyWalking处理器
func NewSkyWalkingProcessor() *SkyWalkingProcessor {
	// 获取SkyWalking端点配置
	endpointConfig, ok := config.Global.Diting.Endpoints["skywalking"]
	if !ok {
		// 如果配置不存在，使用默认值
		endpointConfig = config.EndpointConfig{
			Path:    "/alert/skywalking",
			Enabled: true,
		}
	}

	return &SkyWalkingProcessor{
		httpClient: utils.NewHTTPClient(30 * time.Second),
		ditingURL:  config.Global.Diting.URL,
		endpoint:   endpointConfig.Path,
	}
}

// ProcessAlert 处理SkyWalking告警并发送到谛听系统（简单透传模式）
func (s *SkyWalkingProcessor) ProcessAlert(alert interface{}) error {
	// 简单透传模式：直接将接收到的数据发送到谛听系统

	// 构建完整URL
	url := fmt.Sprintf("%s%s", s.ditingURL, s.endpoint)

	// 打印将要发送到谛听系统的完整数据
	jsonData, err := json.MarshalIndent(alert, "", "  ")
	if err != nil {
		fmt.Printf("❌ 序列化发送数据失败: %v\n", err)
	} else {
		fmt.Printf("📤 准备发送到谛听系统的完整数据:\n%s\n", string(jsonData))
		fmt.Printf("   发送URL: %s\n", url)
	}

	// 发送POST请求到谛听系统
	if err := s.httpClient.PostJSON(url, alert); err != nil {
		return fmt.Errorf("发送告警到谛听系统失败: %v", err)
	}

	fmt.Printf("✅ SkyWalking告警已发送到谛听系统: %s\n", url)
	return nil
}

// GetName 获取处理器名称
func (s *SkyWalkingProcessor) GetName() string {
	return "SkyWalkingProcessor"
}

// GetDescription 获取处理器描述
func (s *SkyWalkingProcessor) GetDescription() string {
	return "处理SkyWalking告警并转发到谛听系统（简单透传模式）"
}
